package kiven.jee.service;

import java.io.Serializable;

import kiven.jee.pagination.Page;

/**
 * Service 业务处理 共用接口
 * 
 * @author kiven
 * @date 2013-03-05
 * 
 */
public interface IBaseService<E extends Serializable, PK extends Serializable> {
	/**
	 * 根据PK查询是否存在
	 * 
	 * @param id
	 *            PK
	 * @return
	 */
	public boolean exists(PK id);

	/**
	 * 保存对象
	 * 
	 * @param entity
	 *            要保存的对象
	 * @return
	 */
	public void add(E entity);

	/**
	 * 修改
	 * 
	 * @param entity
	 */
	public void update(E entity);

	/**
	 * 依主键删除对象
	 * 
	 * @param id
	 * @return
	 */
	public void delete(PK id);

	/**
	 * 删除对象
	 * 
	 * @param entity
	 * @return
	 */
	public void deleteObject(E entity);

	/**
	 * 依PK查询
	 * 
	 * @param pk
	 * @return
	 */
	public E get(PK id);

	/**
	 * 获得资料总笔数
	 * 
	 * @return
	 */
	public int countAll();

	/**
	 * 显示第几页资料,每页显示的资料笔数依照kiven.jee.utils.common.Constants.DEFAULT_PAGE_SIZE
	 * 
	 * @param pageNO
	 *            需要查看资料的当前页数
	 * @return
	 */
	public Page<E> listAll(int pageNO);

	/**
	 * 依照定义的每页显示资料笔数，显示第几页资料
	 * 
	 * @param pageNO
	 *            需要查看资料的页码
	 * @param pageSize
	 *            页显示笔数
	 * @return
	 */
	public Page<E> listAll(int pageNO, int pageSize);

	/**
	 * 根据传入的ID获得，该PK之前第pageNO,且每页pageSize笔资料
	 * 
	 * @param id
	 *            PK
	 * @param pageNO
	 *            页码
	 * @param pageSize
	 *            页显示资料笔数
	 * @return
	 */
	public Page<E> pre(PK id, int pageNO, int pageSize);

	/**
	 * 根据传入的ID获得，该PK之后第pageNO,且每页pageSize笔资料
	 * 
	 * @param id
	 *            PK
	 * @param pageNO
	 *            页码
	 * @param pageSize
	 *            显示资料笔数
	 * @return
	 */
	public Page<E> next(PK id, int pageNO, int pageSize);

	/**
	 * 根据传入的ID获得，该PK之前第pageNO,且每页资料笔数依照kiven.jee.utils.common.Constants.
	 * DEFAULT_PAGE_SIZE
	 * 
	 * @param id
	 *            PK
	 * @param pageNO
	 *            页码
	 * @return
	 */
	public Page<E> pre(PK id, int pageNO);

	/**
	 * 根据传入的ID获得，该PK之后第pageNO,且每页资料笔数依照kiven.jee.utils.common.Constants.
	 * DEFAULT_PAGE_SIZE
	 * 
	 * @param id
	 *            PK
	 * @param pageNO
	 *            页码
	 * @return
	 */
	public Page<E> next(PK id, int pageNO);
}
